CVaR
----
**Expected Shortfall (ES):** también llamado VaR Condicional (**CVaR –
conditional VaR**), *tail conditional expectation, conditional loss o
expected tail loss.*
Indica la pérdida potencial más allá del VaR. El **Expected Shortfall**
o CVaR es un promedio de la cola de las pérdidas (*tail loss*).
Al igual que el VaR el CVaR es una función de dos parámetros: el
horizonte de tiempo y el nivel de confianza.
Importar datos.
~~~~~~~~~~~~~~~
.. code:: r
datos = read.csv("Tres acciones.csv", sep = ";", header = T)
.. code:: r
head(datos)
tail(datos)
.. raw:: html
A data.frame: 6 × 4
| Fecha | ECO | PFBCOLOM | ISA |
| <fct> | <int> | <int> | <int> |
1 | 11/01/2008 | 1995 | 16800 | 7000 |
2 | 14/01/2008 | 1960 | 16380 | 6810 |
3 | 15/01/2008 | 1905 | 15880 | 6890 |
4 | 16/01/2008 | 1860 | 15980 | 6710 |
5 | 17/01/2008 | 1755 | 15900 | 6590 |
6 | 18/01/2008 | 1725 | 15340 | 6320 |
.. raw:: html
A data.frame: 6 × 4
| Fecha | ECO | PFBCOLOM | ISA |
| <fct> | <int> | <int> | <int> |
2811 | 22/07/2019 | 3030 | 41260 | 19000 |
2812 | 23/07/2019 | 3015 | 42020 | 19160 |
2813 | 24/07/2019 | 3000 | 41280 | 19300 |
2814 | 25/07/2019 | 3000 | 41300 | 19800 |
2815 | 26/07/2019 | 2980 | 41160 | 19200 |
2816 | 29/07/2019 | 2980 | 41300 | 18960 |
Matriz de precios.
~~~~~~~~~~~~~~~~~~
.. code:: r
precios=datos[,-1]
precios = ts(precios)
Nombres de las acciones
~~~~~~~~~~~~~~~~~~~~~~~
.. code:: r
nombres = colnames(precios)
nombres
.. raw:: html
- 'ECO'
- 'PFBCOLOM'
- 'ISA'
Matriz de rendimientos.
~~~~~~~~~~~~~~~~~~~~~~~
.. code:: r
rendimientos = diff(log(precios))
Cantidad de acciones
~~~~~~~~~~~~~~~~~~~~
.. code:: r
acciones = ncol(precios)
acciones
.. raw:: html
3
Cantidad de rendimientos
~~~~~~~~~~~~~~~~~~~~~~~~
.. code:: r
numero_rendimientos = nrow(rendimientos)
numero_rendimientos
.. raw:: html
2815
CVaR
~~~~
CVaR diario con un nivel de confianza del 95% ``NC = 0.95`` ####
Proporciones de inversión. ``proporciones=c(0.25, 0.4, 0.35)``
ECO: 25%
PFBCOLOM: 40%
ISA: 35%
.. code:: r
NC = 0.95
proporciones = c(0.25, 0.4, 0.35)
valor_portafolio = 100000000
valor_mercado_acciones = proporciones*valor_portafolio
El CVaR es el promedio de los valores menores de la cola de la izquierda
de la distribución empírica de los rendimientos. Con un nivel de
confianza del 95%, el CVaR es el promedio del 5% de los rendimientos más
bajos.
Se tienen 2815 rendimientos por cada acción, el 5% de los rendimientos
representa 140,75 rendimientos, se debe escoger el entero menor, es
decir, el rendimiento 140 entre los rendimientos más bajos será el VaR
en porcentaje y el CVaR en porcentaje será el promedio de estos 140
rendimientos.
Con ``sort(rendimientos[,i], decreasing = T)`` se está ordenando de
mayor a menor valor cada columna de la matriz rendimientos.
``nrow(rendimientos)*(1 - NC)`` calcula la cantidad de rendimientos que
representa el 5% del total de los rendimientos y la función ``floor()``
aproxima al entero menor. En este caso se tiene el valor de 140.
``tail()`` extrae los valores de la parte inferior de cada columna.
Dentro de la función ``tail()`` se indicó que extraiga los 140
rendimientos más bajos. De los valores que extrae, el VaR en porcentaje
corresponde al primer valor y el CVaR en porcentaje es el promedio de
los 140 rendimientos más bajos. Luego, al multiplicar por
``valor_mercado_acciones`` se obtiene el resultado en términos
monetarios.
El CVaR siempre es mayor que el VaR porque tiene en cuenta todos los
valores de la cola y obtiene un promedio.
.. code:: r
CVaR = vector()
for(i in 1:acciones){
CVaR[i] = abs(mean(tail(sort(rendimientos[,i], decreasing = T), floor(nrow(rendimientos)*(1 - NC))))*valor_mercado_acciones[i])
}
CVaR
.. raw:: html
- 1122434.60465592
- 1419147.26751319
- 1293658.09899953
Rendimientos del portafolio de inversión
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code:: r
rendimientos_portafolio = vector()
for(i in 1:numero_rendimientos){
rendimientos_portafolio[i] = sum(rendimientos[i,]*proporciones)
}
CVaR portafolio de inversión
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code:: r
CVaR_portafolio = abs(mean(tail(sort(rendimientos_portafolio,decreasing = T), floor(nrow(rendimientos)*(1 - NC))))*valor_portafolio)
CVaR_portafolio
.. raw:: html
2841126.68189997